package org.lites.dcimmodifier;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.AdapterView;
import com.osard.editspinner.AppCompatEditSpinner;

import java.util.HashMap;
import java.util.Map;

/**
 * 在AppCompatEditSpinner的基础上添加了回调方法
 * 1.点击Spinner的item时触发
 * 2.改变Spinner的文本时触发
 * 3.添加回调方法
 */
public class AppCompatEditCallbackSpinner extends AppCompatEditSpinner{
    private final Map<String,CallBack>callBackMap=new HashMap<>();
    public AppCompatEditCallbackSpinner(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    /**
     * 添加条目点击回调方法
     * @param callBack 回调方法
     */
    public void addItemClickCallBack(CallBack callBack) {
        callBackMap.put("itemclick",callBack);
    }
    /**
     * 移除条目点击回调方法
     */
    public void removeItemClickCallBack(){
        callBackMap.remove("itemclick");
    }
    /**
     * 添加文本更改回调方法
     * @param callBack 回调方法
     */
    public void addTextChangeCallBack(CallBack callBack){
        callBackMap.put("textchange",callBack);
    }
    /**
     * 移除文本更改回调方法
     */
    public void removeTextChangeCallBack(){
        callBackMap.remove("textchange");
    }
    /**
     * 移除文所有回调方法
     */
    public void removeAllCallBack(){
        callBackMap.clear();
    }

    /**
     * 条目点击触发事件
     * @param parent 父视图
     * @param view 当前视图
     * @param position 位置
     * @param id id
     */
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        super.onItemClick(parent, view, position, id);
        if (callBackMap != null) {
            CallBack callBack = callBackMap.get("itemclick");
            if (callBack != null) {
                ((ItemClickCallBack) callBack).execute(parent, view, position, id);
            }
        }
    }

    /**
     * 文本更改触发事件
     * @param s 文本
     * @param start 开始位置
     * @param before 之前长度
     * @param count 现在长度
     */
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count){
        if (callBackMap != null) {
            CallBack callBack = callBackMap.get("textchange");
            if (callBack != null) {
                ((TextChangeCallBack) callBack).execute(s, start, before, count);
            }
        }
        super.onTextChanged(s, start, before, count);
    }
}
